<?php

require_once 'SmartL/Zend/Controller/Action.php';
require_once 'Doctrine.php';
require_once 'Doctrine/Query.php';
require_once 'Db/Shop/Record/Category.php';
require_once 'Db/Shop/Record/Product.php';
require_once 'SmartL/Zend/Paginator/Adapter/Doctrine.php';
require_once 'Zend/Paginator.php';

class ProductCatalogueController extends SmartL_Zend_Controller_Action // Controller "Katalog produktů"
{
    public function listAction() // Akce "list", tedy "Seznam produktů v kategorii"
    {	
        if (!$this->_hasParam('id')) { // Ověříme, zda byl zadán parametr identifikující kategorii
            $this->_helper->redirector->goto("index","index");
        }
        
        $query = new Doctrine_Query(); // Dotazem databázi zjistíme, zda požadovaná kategorie existuje
        $category = $query->select("*, t.*")->from("Db_Shop_Record_Category c")
        				  ->leftJoin("c.Translation t")
                          ->where("c.id = ?", array($this->_getParam('id')))
                          ->execute()->getFirst();
        
        if (is_null($category)) { // Kategorie neexistuje!
            $this->_helper->redirector->goto("index","index");
        }
        
        $this->view->category = $category; // Předáme "Pohledu" informace o kategorii

        $query = new Doctrine_Query(); // Dotazem databázi získáme seznam produktů požadované kategorie
        
        // Seznam požadovaných sloupců z tabulky produktů zjistíme z konfigurace
        $selectionData = $this->config->getAction('list')->getSelection('list');
        
		$query->parseDqlQuery($selectionData->getDql('Db_Shop_Record_Product'))
                         ->where("t.categoryId = ?", array($this->_getParam('id')));
		$countQuery = $query->copy();
        $query->leftJoin("t.Translation tr");
        $products = new Zend_Paginator(new SmartL_Zend_Paginator_Adapter_Doctrine($query,
        									Doctrine::HYDRATE_RECORD, array('countQuery'=>$countQuery)));
        $products->setCurrentPageNumber($this->_getParam('page'));
        $products->setItemCountPerPage(3);                     
        
        $this->view->products = $products; // Předáme "Pohledu" seznam produktů v kategorii
    }
        
    public function detailAction()
    {
		if ( $this->_hasParam('id') ) {
			require_once 'Db/Shop/Record/Product.php';
			$query = new Doctrine_Query();
			$selection = $this->config->getAction('detail')->getSelection('detail');
			$query->parseDqlQuery($selection->getDql('Db_Shop_Record_Product'));
			$query->where('t.id = ?',$this->_getParam('id'));
			$data = $query->execute()->getFirst();
			$this->view->product = $data;
		}
    }
    
    public function categoriesMenuAction()
    {   
         $query = new Doctrine_Query();
         $cat = new Db_Shop_Record_Category();
         $categories = $query->from('Db_Shop_Record_Category c')
         		->leftJoin('c.Translation t')
         		->select('c.id, t.*')
         		->execute();
         $this->view->categories = $categories;        
    }  
}
